# Project 5 超音波センサー ### **1.説明** ![image-20250509085643931](media/A33.png) HC-SR04超音波センサーは、コウモリのようにソナーを使って物体までの距離を測定します。高精度で安定した読み取りが可能な非接触距離検出を簡単に行えるパッケージで提供されます。超音波送信モジュールと受信モジュールがセットになっています。 ![Img](media/A34.png) HC-SR04または超音波センサーは、障害物検知や距離測定アプリケーションをはじめ、さまざまな電子プロジェクトで広く使われています。ここでは、Arduinoと超音波センサーを使った距離測定の簡単な方法と、超音波センサーのArduinoでの使い方を紹介します。 ### **2.仕様** - 動作電圧 : +5V DC - 待機電流 : \<2mA - 動作電流 : 15mA - 有効角度 : \<15° - 測定距離範囲 : 2cm – 300 cm - 精度 : 0.3 cm - 測定角度 : 30度 - トリガ入力パルス幅 : 10μS ![image-20250509085705309](media/A35.png) ### **3.部品** | 開発ボード *1 | 8833 モータードライバー *1 | 赤色LEDモジュール*1 | 超音波センサー*1 | | ------------------------------------------------------------ | ---------------------------------------- | ------------------------ | ------------------------------------------------------------ | | ![img](media/A8.jpg) | ![img](media/A9.jpg) | ![img](media/A10.jpg) | ![image-20250509085643931](media/A33.png) | | 4P デュポン線*1 | USBケーブル*1 | 3P デュポン線*1 | | | ![image-20250509143737972](media/A36.png) | ![img](media/A12.jpg) | ![img](media/A11.jpg) | | ### **4.動作原理** 上の写真のように、2つの目のような形をしています。片方が送信端、もう片方が受信端です。 超音波モジュールはトリガ信号を受けると超音波を発信します。超音波が物体に当たり反射して戻ってくると、モジュールはエコー信号を出力します。これにより、トリガ信号とエコー信号の時間差から物体までの距離を測定できます。 tは信号が障害物に当たり戻ってくるまでの時間です。空気中の音速は約343m/sで、距離 = 速度 × 時間です。ただし、超音波は往復するため距離の2倍の時間がかかります。したがって、距離 = (速度 × 時間) / 2 となります。 **超音波モジュールの使用方法とチャート:** 1. GPIOピンを使ってSR04のTrigピンに10μs以上の高レベル信号を与え、距離測定をトリガーします。 2. トリガー後、モジュールは自動的に8回の40KHz超音波パルスを送信し、信号の戻りを検出します。この処理はモジュールが自動で行います。 3. 信号が戻ると、Echoピンは高レベルを出力し、その高レベルの持続時間が超音波送信から戻りまでの時間となります。 ![image-20250509143833078](media/A37.png) **超音波センサーの回路図:** ![image-20250509154035287](media/A38.png) ### **5.配線図** ![image-20250509154107103](media/A39.png) 超音波センサーのVCC、Trig、Echo、Gndはそれぞれ5V(V)、D12、D13、Gnd(G)に接続します。 ### **6.テストコード** ```c //*************************************************************************** /* keyestudio 4wd BT Car lesson 5.1 Ultrasonic Sensor http://www.keyestudio.com */ int trigPin = 12; // トリガー int echoPin = 13; // エコー long duration, cm, inches; void setup() { // シリアルポート開始 Serial.begin (9600); // 入出力の定義 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { // センサーは10マイクロ秒以上のHIGHパルスでトリガーされます。 // クリーンなHIGHパルスを確実にするために、事前に短いLOWパルスを与えます: digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // センサーからの信号を読み取ります:HIGHパルスの // 持続時間は、パルス送信から物体でのエコー受信までの時間(マイクロ秒単位)です。 duration = pulseIn(echoPin, HIGH); // 時間を距離に変換します cm = (duration/2) / 29.1; // 29.1で割るか、0.0343を掛ける inches = (duration/2) / 74; // 74で割るか、0.0135を掛ける Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(250); } //*************************************************************************** ``` **7.テスト結果** コードをV4.0ボードに正常にアップロードした後、配線図に従って配線を接続し、USBケーブルでコンピュータに接続してボードに電源を供給します。電源を入れたら、シリアルモニターを開き、ボーレートを9600に設定します。 検出された距離が表示され、単位はcmとinchです。超音波センサーを手で遮ると、表示される距離の値が小さくなります。 ![image-20250509154147537](media/A40.png) **8.コード説明** **int trigPin -** このピンは超音波を送信するために定義されており、通常は出力です。 **int echoPin -** これは受信ピンとして定義されており、通常は入力です。 **cm = (duration/2) / 29.1 -** **inches = (duration/2) / 74 -** 以下の式を使って距離を計算できます: distance = (往復時間 / 2) × 音速 音速は:343m/s = 0.0343 cm/μs = 1/29.1 cm/μs インチの場合:13503.9in/s = 0.0135 in/μs = 1/74 in/μs 波が送信され、物体に当たり、センサーに戻るまでの時間を考慮するため、往復時間を2で割る必要があります。 **9.拡張練習** 超音波で測定した距離を表示しました。測定した距離でLEDを制御してみませんか?試してみましょう。LEDライトモジュールをD9ピンに接続します。 ![image-20250509154232505](media/A41.png) ```c //***************************************************************** /* keyestudio 4wd BT Car lesson 5.2 Ultrasonic LED http://www.keyestudio.com */ int trigPin = 12; // トリガー int echoPin = 13; // エコー long duration, cm, inches; void setup() { Serial.begin (9600); // シリアルポート開始 pinMode(trigPin, OUTPUT); // 入出力の定義 pinMode(echoPin, INPUT); } void loop() { // センサーは10マイクロ秒以上のHIGHパルスでトリガーされます。 // クリーンなHIGHパルスを確実にするために、事前に短いLOWパルスを与えます: digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // センサーからの信号を読み取ります:HIGHパルスの // 持続時間は、パルス送信から物体でのエコー受信までの時間(マイクロ秒単位)です。 duration = pulseIn(echoPin, HIGH); // 時間を距離に変換します cm = (duration/2) / 29.1; // 29.1で割るか、0.0343を掛ける inches = (duration/2) / 74; // 74で割るか、0.0135を掛ける Serial.print(inches); Serial.print("in, "); Serial.print(cm); Serial.print("cm"); Serial.println(); delay(250); if (cm>=2 && cm<=10) { Serial.println("HIGH"); digitalWrite(9, HIGH); } else { Serial.println("LOW"); digitalWrite(9, LOW); } } //***************************************************************** ``` コードをV4.0ボードに正常にアップロードした後、配線図に従って配線を接続し、USBケーブルでコンピュータに接続してボードに電源を供給します。電源を入れたら、超音波センサーを手で遮って(距離が2〜10cmの間)、LEDが点灯するか確認してください。